package cn.doitedu.day08

import scala.io.Source




/**
 * 需求: 使用两种方式，一致是实现Ordered接口，一种是传入隐式转换Ordering类型
 * 1.读取文件中的数据，字段含义姓名、年龄、颜值
 * 要求先按照颜值降序排序，如果颜值相等，再按照年龄升序排序
 */
object Test01 {

  //自定义的隐式转换参数
  implicit object orderingTeacher extends Ordering[Teacher] {

    override def compare(x: Teacher, y: Teacher): Int = {
      x.age - y.age
    }
  }

  def main(args: Array[String]): Unit = {

    //读数据（使用scala 的IO读取数据）
    val source = Source.fromFile("data/test1.txt")
    //以迭代器的方式读取数据
    val lines: Iterator[String] = source.getLines()
    //对数据进行整理
    val teachers: Iterator[Teacher] = lines.map(line => {
      val fields = line.split(",")
      val name = fields(0)
      val age = fields(1).toInt
      val fv = fields(2).toDouble
      Teacher(name, age, fv)
    })
    //希望对数据进行排序
    //将数据放入到内存中
    val lst: Seq[Teacher] = teachers.toList
    //1.方式，封装数据的Bean本身就有排序规则
    //特殊的地方：Teacher实现了Ordered接口，但是sortBy和sorted是List中的排序方法，需要传入Ordering[Teacher]类型
    //如果sortBy、sorted找不到对象对应的方法，就会报错
    //说明scala中，有一个隐式转换方法，可以将Ordered 转成Ordering(LowPriorityOrderingImplicits有一个隐式转换)
    //val res = lst.sortBy(x => x)
    val res = lst.sorted

    println(res.toBuffer)

    //关闭scala IO的Source
    source.close()

  }

}
